package text;

import com.sqsf.service.UserService;
import com.sqsf.service.UserServiceImpl;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;

public class MyTest {
    @Test
    public void scope(){
        ClassPathXmlApplicationContext applicationContext = new
                ClassPathXmlApplicationContext("applicationContext.xml");
        UserService u1 = (UserService) applicationContext.getBean("userService");
        UserService u2 = (UserService) applicationContext.getBean("userService");
//        //默认scope为单利模式 重复获取为同一个对象 如果设置为多例则每次获取都是一个新的对象
//        System.out.println(u1==u2);
//        System.out.println(u1.hashCode()+"|"+u2.hashCode());
        applicationContext.close();
    }
    @Test
    public void test(){
        //1.读取配置创建spring容器对象(可以看做是一个map集合)
        //1)ClassPathXmlApplicationContext 读取类路径(resource)下指定配置文件 创建spring容器(常用)
        //2)FileSystemXmlApplicationContext 读取文件路径下指定配置文件 创建spring容器
        //3)AnnotationConfigApplicationContext 读取注解配置类 创建spring容器
        ClassPathXmlApplicationContext applicationContext = new
                ClassPathXmlApplicationContext("applicationContext.xml");
        //2.通过getBean方法 获取指定(交由spring容器管理创建)对象
        //1)getBean(String id) 通过配置时书写在bean标签的唯一id获取对应的对象 返回Object 需要强制转换后使用
        //2)getBean(Class c) 通过传入class类型 类型匹配的形式获取指定对象 注意 如果存在多个会报错
        UserService u1 = (UserService) applicationContext.getBean("userService");
        UserService u2 = applicationContext.getBean(UserService.class);
        //3.使用
        u1.save();
        u2.save();
        //4.关闭容器
        //当使用完毕后需要销毁容器内的对象
        applicationContext.close();
    }
}
